//可用于form表单
export function getNow() {
  const date = new Date()
  const year = date.getFullYear()
  const month = String(date.getMonth() + 1).padStart(2, '0') // 月份是从0开始的，所以需要加1，并用padStart方法补零
  const day = String(date.getDate()).padStart(2, '0') // getDate方法返回的是月份中的哪一天（1-31），也需要补零
  const hours = String(date.getHours()).padStart(2, '0') // 获取小时并补零
  const minutes = String(date.getMinutes()).padStart(2, '0') // 获取分钟并补零
  const seconds = String(date.getSeconds()).padStart(2, '0') // 获取秒并补零
  return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.000+00:00`
}

//可用于form表单
export function getToday() {
  const date = new Date()
  const year = date.getFullYear()
  const month = String(date.getMonth() + 1).padStart(2, '0') // 月份是从0开始的，所以需要加1，并用padStart方法补零
  const day = String(date.getDate()).padStart(2, '0') // getDate方法返回的是月份中的哪一天（1-31），也需要补零
  return `${year}-${month}-${day}`
}

export function getDateByStr(str) {
  if (!str) {
    return '/'
  }
  if (str.includes('T')) {
    //2024-05-26T16:00:00.000+00:00
    var date = new Date(str)
    var year = date.getFullYear()
    var month = ('0' + (date.getMonth() + 1)).slice(-2)
    var day = ('0' + date.getDate()).slice(-2)
    return year + '-' + month + '-' + day
  }
}
//根据日期获取该日期在其所属月份的最后一天，要求入参yyyy-MM-dd
export function getLastDayInMonthByDateStr(str) {
  if (!str) {
    return
  }
  // 将输入字符串转换为日期对象
  const date = new Date(str)
  // 获取当前日期所在年份和月份
  const year = date.getFullYear()
  const month = date.getMonth()
  // 创建一个新的日期对象，设置为下个月的第一天，然后减去一天得到本月最后一天
  const lastDay = new Date(Date.UTC(year, month + 1, 0))
  // 格式化为 yyyy-MM-dd
  return lastDay.toISOString().split('T')[0] // 返回格式为 yyyy-MM-dd
}
//根据日期获取该日期在其所属月份的第一天，要求入参yyyy-MM-dd
export function getFirstDayInMonthByDateStr(str) {
  if (!str) {
    return
  }
  // 替换字符串的后两位为 '01'
  return str.slice(0, 8) + '01' // 直接构建为 yyyy-MM-01
}

export function formateDate(str, inputFormat, outputFormat) {
  if (!str) {
    return '/'
  }
  // 定义格式化映射
  const formatMap = {
    yyyy: (date) => date.getFullYear(),
    MM: (date) => ('0' + (date.getMonth() + 1)).slice(-2),
    dd: (date) => ('0' + date.getDate()).slice(-2),
  }

  // 解析日期
  function parseDate(dateStr, format) {
    const formatTokens = format.split(/[-/]/)
    const dateTokens = dateStr.split(/[-/]/)
    const date = new Date()

    formatTokens.forEach((token, index) => {
      switch (token) {
        case 'yyyy':
          date.setFullYear(parseInt(dateTokens[index], 10))
          break
        case 'MM':
          date.setMonth(parseInt(dateTokens[index], 10) - 1)
          break
        case 'dd':
          date.setDate(parseInt(dateTokens[index], 10))
          break
      }
    })

    return date
  }

  // 生成目标格式的字符串
  function formatDateOutput(date, format) {
    return format
      .split(/[-/]/)
      .map((token) => formatMap[token](date))
      .join('-')
  }

  // 如果是 ISO 格式，处理日期
  if (str.includes('T')) {
    const date = new Date(str)
    return formatDateOutput(date, outputFormat)
  } else {
    const date = parseDate(str, inputFormat)
    return formatDateOutput(date, outputFormat)
  }
}
